package orders.config;

import com.mongodb.Mongo;
import com.mongodb.MongoClient;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.config.AbstractMongoConfiguration;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;

/**
 * @author XiaoDongLei
 * @Package com.vonzhou.springinaction.knights
 * @date 2018/4/1
 * @Description: MongoDB是最为流行的开源文档数据库之一。Spring Data MongoDB提供了三种方式在Spring应用中使用MongoDB：
 * 1、通过注解实现对象-文档映射；
 * 2、使用MongoTemplate实现基于模板的数据库访问；
 * 3、自动化的运行时Repository生成功能。
 * 我们已经看到Spring Data JPA如何为基于JPA的数据访问实现自动化Repository生成功能。Spring Data MongoDB为基于MongoDB的数据访问提供了相同的功能。
 *
 * 不过，与Spring Data JPA不同的是，Spring Data MongoDB提供了将Java对象映射为文档的功能。（Spring Data JPA没有必要为JPA提供这样的注解，因为JPA规范本身就提供了对象-关系映射注解）。除此之外，Spring Data MongoDB为通用的文档操作任务提供了基于模板的数据访问方式。
 *
 * 1、@EnableMongoRepositories(basePackages = "orders.db")启用Spring Data MongoDB的自动化Repository生成功能。
 * 2、首先，我们需要配置MongoClient，以便于访问MongoDB数据库。同时，我们还需要有一个MongoTemplate bean，实现基于模板的数据库访问。此外，不是必须，但是强烈推荐启用Spring Data MongoDB的自动化Repository生成功能。
 *
 *
 * 现在Spring Data MongoDB已经配置完成了，我们很快就可以使用它来保存和查询文档了。但首先，需要使用Spring Data MongoDB的对象-文档映射注解为Java领域对象建立到持久化文档的映射关系。
 */
@Configuration
//自动化的运行时Repository生成功能。
@EnableMongoRepositories(basePackages = "orders.db")
public class MongoConfig extends AbstractMongoConfiguration {

	/**
	 * description getDatabaseName()方法来提供数据库的名称。
	 *
	 * @param
	 * @return java.lang.String
	 * @author leixiaodong1993@163.com
	 * @date 2018/4/1 18:59
	 */
	@Override
	protected String getDatabaseName() {
		return "OrdersDB";
	}

	/**
	 * description: mongo()方法依然会创建一个MongoClient的实例，因为它会抛出Exception，所以我们可以直接使用MongoClient，而不必再使用MongoFactoryBean了。
	 *
	 * @param
	 * @return com.mongodb.Mongo
	 * @author leixiaodong1993@163.com
	 * @date 2018/4/1 18:58
	 */
	@Override
	public Mongo mongo() throws Exception {
		/**
		 * 要配置MongoClient，以便于访问MongoDB数据库
		 */
		return new MongoClient();
	}

}